package com.witmore.neutron.ai.web.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.witmore.neutron.ai.db.entity.PermissionDO;
import com.witmore.neutron.ai.web.apiv2.controller.vo.*;

import java.util.List;

/**
 * 权限服务接口
 * Author: 豆子高
 * Date: 2025/1/2
 */
public interface PermissionService {

    /**
     * 根据用户ID获取权限信息
     * @param userId 用户ID
     * @return 权限信息列表
     */
    List<PermissionDO> getPermissionsByUserId(Long userId);

    /**
     * 根据用户ID获取权限编码列表
     * @param userId 用户ID
     * @return 权限编码列表
     */
    List<String> getPermissionNamesByUserId(Long userId);

    /**
     * 分页查询权限列表
     * @param queryParam 查询参数
     * @return 权限分页列表
     */
    Page<PermissionResult> getPermissionPage(PermissionQueryParam queryParam);

    /**
     * 获取权限树形结构
     * @return 权限树形列表
     */
    List<PermissionResult> getPermissionTree();

    /**
     * 根据ID获取权限详情
     * @param id 权限ID
     * @return 权限详情
     */
    PermissionResult getPermissionById(Long id);

    /**
     * 创建权限
     * @param createParam 创建参数
     * @param creator 创建者
     * @return 创建结果
     */
    boolean createPermission(PermissionCreateParam createParam, String creator);

    /**
     * 更新权限
     * @param updateParam 更新参数
     * @return 更新结果
     */
    boolean updatePermission(PermissionUpdateParam updateParam);

    /**
     * 删除权限
     * @param id 权限ID
     * @return 删除结果
     */
    boolean deletePermission(Long id);

    /**
     * 批量删除权限
     * @param ids 权限ID列表
     * @return 删除结果
     */
    boolean batchDeletePermission(List<Long> ids);

    /**
     * 检查权限编码是否存在
     * @param code 权限编码
     * @param excludeId 排除的权限ID（用于更新时检查）
     * @return 是否存在
     */
    boolean checkPermissionCodeExists(String code, Long excludeId);
}